package vue.util;

import java.awt.Color;


public class Point {

	
	
	
	public static int MAX_NUMERO_EXISTANT = 0;
	public static Color[] LISTE_COULEUR = new Color[] {
		Color.BLUE,
		Color.GREEN,
		Color.ORANGE,
		Color.PINK,
		Color.CYAN};
	private int numero ;

	
	private float X ;
	private float Y ;
	
	private Color couleur = Color.BLACK ;
	private boolean afficheNumero = false ;
	
	
	private String libelle ;
	private String texteExplicite = null ;
	private int numeroMatriceCorrespondante;
	
	
	
	/**
	 * constructeur avec plusieurs parametres.
	 * 
	 * @param X
	 * @param Y
	 * @param numeroMatriceCorrespondante
	 * @param libelle
	 */
	public Point(float X,float Y,int numeroMatriceCorrespondante,String libelle)  {


		this.numero = Point.MAX_NUMERO_EXISTANT+1 ;
		
		
		Point.MAX_NUMERO_EXISTANT = Point.MAX_NUMERO_EXISTANT +1 ;
		
		this.X = X ;
		this.Y = Y ;
		this.libelle = libelle ;
		
		this.numeroMatriceCorrespondante = numeroMatriceCorrespondante ;
		
		
		

		setCouleur( Point.LISTE_COULEUR[
		                                   getnumero()%
		                                   Point.LISTE_COULEUR.length
		                                   ]) ;
		
	}
	
	/**
	 * constructeur qui donne plus d inforations sur le point.
	 * 
	 * @param X
	 * @param Y
	 * @param numeroMatriceCorrespondante
	 * @param libelle
	 * @param c
	 */
	public Point(float X,float Y,int numeroMatriceCorrespondante,String libelle,Color c)  {


		this.numero = Point.MAX_NUMERO_EXISTANT+1 ;
		
		
		Point.MAX_NUMERO_EXISTANT = Point.MAX_NUMERO_EXISTANT +1 ;
		
		this.X = X ;
		this.Y = Y ;
		this.libelle = libelle ;
		
		this.numeroMatriceCorrespondante = numeroMatriceCorrespondante ;

		setCouleur(c) ;
		
	}
	

	/**
	 * ce point n est pas destine a etre affiche,
	 * on s'en sert pour creer des points
	 * avec des proprietes pour etre compares aux
	 * points graphiques.
	 * 
	 * on s en sert dans Representation2D.java
	 * notemment pour avoir des points en x,y
	 * et pas en x1,x2
	 * 
	 * @param X la coordonnee X
	 * @param Y la coordonnee Y
	 */
	public Point(float X,float Y)  {


		this.numero = Point.MAX_NUMERO_EXISTANT+1 ;
		Point.MAX_NUMERO_EXISTANT = Point.MAX_NUMERO_EXISTANT +1 ;
		
		this.X = X ;
		this.Y = Y ;
		
	}
	
	
	/**
	 * rend la coordonne X du point.
	 * @return
	 */
	public float getX() {
		return X;
	}
	
	/**
	 * rend la coordonne Y du point
	 * @return
	 */
	public float getY() {
		return Y;
	}

	
	/**
	 * change la coordonne X du point.
	 * @param X
	 */
	public void setX(float X) {
		this.X = X;
	}
	
	/**
	 * change la coordonne Y du point
	 * @param Y
	 */
	public void setY(float Y) {
		this.Y = Y;
	}

	/**
	 * valeur de description du point.
	 * a afficher en surimpression dans le graphique
	 * 
	 */
	public String toString()
	{
		if (this.texteExplicite==null)
			return this.libelle+" : [X1="+this.getX()+" X2="+this.getY()+"] matrice ["+this.numeroMatriceCorrespondante+"]" ;
		return this.texteExplicite  ;
	}

	
	/**
	 * donne un texte particulier
	 * qui sera mis a la place de celui par defaut
	 * dans toString.
	 * 
	 * @param s
	 */
	public void settext(String s)
	{
		this.texteExplicite = s ;
	}



	/**
	 * coleur d affichage
	 * 
	 * @return
	 */
	public Color getCouleur() {
		return couleur;
	}


	/**
	 * change la couleur d affichage
	 * @param couleur
	 */
	public void setCouleur(Color couleur) {
		this.couleur = couleur;
	}


	/**
	 * est-ce qu'on affiche les informations complementaires
	 * 
	 * @return
	 */
	public boolean isAfficheNumero() {
		return afficheNumero;
	}



	/**
	 * est-ce qu'on affiche les informations complementaires
	 * 
	 * @param afficheNumero
	 */
	public void setAfficheNumero(boolean afficheNumero) {
		this.afficheNumero = afficheNumero;
	}

	/**
	 * le numero du point.
	 * on ne s en sert plus.
	 * 
	 * @return
	 */
	public int getnumero() {
		return numero ;
	}

	public int getNumeroMatriceCorrespondante() {
		return numeroMatriceCorrespondante;
	}
	
	
	
	
	
	
}
